package modelovectorial;

import soporte.web.Pagination;

/**
 * @project DLC Final / UTN FRC 2013
 * @date Febrero de 2013
 *
 * @author Gonzalo Arribere
 * @author Gustavo Morales
 * @author Pablo Moreno
 *
 * Esta clase alamacena datos estadisticos de las paginas arrojadas como
 * resultados4en una busqueda.
 */
public class SearchResultStats {

    private final String FORMAT_EXECUTION_TIME = "%.4f";
    private int mMaxPages;
    private int mSelectedPage;
    private long mInitTime;
    private long mEndTime;
    private String mQuery;
    private int mTotalResults;

    /**
     * Devuelve un entero que representa la cantidad de resultados por pagina
     * mostrados.
     *
     * @return entero
     */
    public int getResultsPerPage() {
        return Pagination.RESULTS_PER_PAGE;
    }

    /**
     * Constructor por defecto de la clase.
     */
    public SearchResultStats() {
        mInitTime = 0;
        mEndTime = 0;
    }

    /**
     * Setea el valor de la pagina seleccionada.
     *
     * @param pSelectedPage entero que representa la pagina seleccionada.
     */
    public void setSelectedPage(int pSelectedPage) {
        mSelectedPage = pSelectedPage;
    }

    /**
     * Devuelve un entero que representa la pagina seleccionada.
     *
     * @return entero con el numero de la pagina seleccionada.
     */
    public int getSelectedPage() {
        return mSelectedPage;
    }

    /**
     * Devuelve la maxima cantidad de paginas.
     *
     * @return entero que representa la maxima cantidad de paginas.
     */
    public int getMaxPages() {
        return mMaxPages;
    }

    /**
     * Guarda en la variable mInitTime el valor de tiempo inicial para despues
     * calcular el intervalo de tiempo transcurrido.
     */
    public void takeInitTime() {
        mInitTime = System.currentTimeMillis();
    }

    /**
     * Guarda en la variable mEndTime el valor de tiempo final para despues
     * calcular el intervalo de tiempo transcurrido.
     */
    public void takeEndTime() {
        mEndTime = System.currentTimeMillis();
    }

    /**
     * Calcula el intevalo de tiempo transcurrido entre dos puntos de tiempo y
     * lo devuelve.
     *
     * @return una cadena que representa el intervalo de tiempo transcurrido.
     */
    public String getExecutionTime() {
        return String.format(FORMAT_EXECUTION_TIME, ((double) (mEndTime - mInitTime) / 1000));
    }

    /**
     * Devuelve la consulta realizada.
     *
     * @return una cadena con la consulta realizada.
     */
    public String getQuery() {
        return mQuery;
    }

    /**
     * Devuelve la consulta realizada pero con formato URL.
     *
     * @return cadena con la consulta en formato URL.
     */
    public String getUrlQuery() {
        return mQuery.replace(" ", "%20");
    }

    /**
     * Setea el valor de la variable mQuery con un valor por paramtero.
     *
     * @param pRealQuery cadena que contiene la consulta realizada.
     */
    public void setQuery(String pRealQuery) {
        mQuery = pRealQuery;
    }

    /**
     * Setea el valor de la maxima cantidad de paginas mostradas.
     *
     * @param pMaxPages entero que contiene la maxima cantidad de paginas.
     */
    public void setMaxPages(int pMaxPages) {
        mMaxPages = pMaxPages;
    }

    /**
     * Setea la cantidad de resultados a mostrar en una consulta.
     *
     * @param pLength entero que representa la cantidad de resultados a mostrar.
     */
    public void setTotalResults(int pLength) {
        mTotalResults = pLength;
    }

    /**
     * Devuelve la cantidad de resultados a mostrar.
     *
     * @return un entero que contiene la cantidad maxima de resultados a mostrar
     * en una consulta.
     */
    public int getTotalResults() {
        return mTotalResults;
    }
}